import { getPage, post, get } from '../../request'

const ns = '/job'

export interface Job {
  jobId: string // 任务ID
  jobName: string // 任务名称
  jobGroup: string // 任务组名
  invokeTarget: string // 调用目标方法 class.method(p1,p2)
  cronExpression: string // cron执行表达式
  misfirePolicy: string // 计划执行错误策略（1立即执行 2执行一次 3放弃执行）
  concurrent: number // 是否并发执行（1允许 0禁止）
  status: number // 状态（1正常 0暂停）
  remark: string // 备注信息
}

export const jobApi = {
  /**
   * 查询分页定时任务列表
   * @param page
   * @param params
   * @returns
   */
  findListPage: (page: AxiosType.Pagination, params?: { [key: string]: any }) => {
    return getPage({ url: ns, params }, page)
  },

  /**
   * 查询单个定时任务
   */
  findById: (id: string) => {
    return get({ url: `${ns}/${id}` })
  },

  /**
   * 创建定时任务
   *
   * @param {*} data 定时任务对象
   * @returns
   */
  create(data: Job) {
    return post({
      url: ns,
      data
    })
  },

  /**
   * 更新定时任务
   *
   * @param {*} data 定时任务对象
   * @returns
   */
  update(data: Job) {
    return post({
      url: `${ns}/update`,
      data
    })
  },

  /**
   * 删除定时任务
   *
   * @param {*} data 定时任务id数组
   * @returns
   */
  delete(data: string[]) {
    return post({
      url: `${ns}/delete`,
      data
    })
  },

  /**
   * 修改状态
   * @param data
   * @returns
   */
  updateStatus(data: Job) {
    return post({
      url: `${ns}/status/update`,
      data
    })
  },

  /**
   * 立即运行一次
   * @param data
   * @returns
   */
  run(data: Job) {
    return post({
      url: `${ns}/run`,
      data
    })
  },

  /**
   * 查询分页定时任务日志列表
   * @param page
   * @param params
   * @returns
   */
  findLogListPage: (page: AxiosType.Pagination, params?: { [key: string]: any }) => {
    return getPage({ url: `${ns}/log`, params }, page)
  },

  /**
   * 查询任务运行统计
   * @param jobId 任务ID
   * @returns 统计信息
   */
  findRunInfo: (jobId: string) => {
    return get({ url: `${ns}/run/info/${jobId}` })
  }
}
